/*
 * @Author: Tendo 
 * @Date: 2021-09-01 10:06:55 
 * @param {number} target
 * @param {number[]} nums
 * @return {number}
 * @desc 滑动窗口(双指针)
 */

const minSubArrayLen = (target, nums) => {
    let res, //结果子序列长度
        sum = 0, // 滑动窗口的数值之和
        i = 0, //滑动窗口的起始位置
        subLength = 0 // 滑动窗口的长度

    for (let j = 0; j < nums.length; j++) {
        sum += nums[j]
        // 这里用while，每次更新i，并不断比较子序列是否符合条件
        while(sum >= target) {
            subLength = j - i + 1;
            res = res < subLength ? res : subLength
            sum -= nums[i++] // 这里体现出滑动窗口的精髓之处，不断变更子序列的起始位置(i)
        }
    }
    // 如果res没有被赋值的话就返回0
    return res == undefined ? 0 : res
}

let target = 15, nums = [5,1,3,5,10,7,4,9,2,8]

console.log(minSubArrayLen(target, nums));